Bevezets a Visual Basic-be (VB 3.0-ra alapozva)
================================================
Hatodik rsz


Az MDI form-okkal fogunk foglalkozni. Taln ma mr annyira nem kedveltek, mint a Win3.1-es idkben voltak, de azrt megr egy rvid lerst. Igaz, kapsbl pl. Paint Shop Pro is hasznlja ezt a rendszert.

MDI form
-=-=-=-=

Mi is az az MDI form? A form-ot mr tudjuk, az MDI pedig egy rvidts, mgpedig a Multiple Document-Interface hangzatos nevet takarja. Ez egy specilis form-fajta, aminek klnlegessge az, hogy az mdi form-okon bell tovbbi form-ok lehetnek. J plda r a Windows 3.1 Programkezelje (vagy minek hvtk), ami a nem-kicsontozott Windows 95-kben s 98-akban is benne van mg. A Start men Futtats menpontjban rd be azt, hogy "progman". Itt elvileg megvannak a Start menben is megtallhat programcsoportok, ha nem, akkor knnyen ltre tudsz hozni egyet a Fjl men j pontjt vlasztva. Na, ilyet fogunk mi is csinlni VB-vel. Az ablakok rendezsvel (mozaik, kaszkd, stb) egytt.

VB 3.0-ban a File menu/New MDI Form menponttal tudsz j mdi form-ot a project-hez adni. Egy project-en bell csak egy mdi form lehet. VB 5.0-tl ez mshol helyezkedik el: Project/Add MDI Form

t kell lltani a programot, hogy alapesetben ezt a form-ot tltse be. Errl mg szerintem nem volt sz, pedig igen fontos dolog: az Options/Project menpontban a kzpsnl ("Start Up Form") kell belltani az MDIForm1-et. Ugyanez VB 5.0-ban: Project/Project1 Options (Project1 termszetesen vltozik attl fggen, hogy mi a VBP fjlod neve).

Ht akkor itt van, egy szp, szrke form. Ennek van nhny olyan jellemzje, ami egy sima form-nak nincs. Pldul, a httrszne szrke, nem lehet r rakni semmit, csak menje lehet. Ezt ugyan meg lehet vltoztatni, de elg bonyolult, nzd meg a vbznt, ha jl emlkszem MDIFORM.ZIP nven letlthetsz egy olyan pldaprogramot, amivel ki lehet dszteni rendesen, de ez tnyleg nehz dolog.

Akkor most hozzunk ltre egy olyan ablakot, ami ezen bell tallhat! Ha mr nincs meg a Form1, akkor hozz ltre egy jat, egy kicsit mretezd t, s az MDIChild tulajdonsgt lltsd True-ra! Ezutn a MDIForm1_Load() eljrshoz rd be, hogy Form1.Show. Indtsd el. Olyan, mint egy Asztal-on belli Asztal, nem? Szp szrke munkaterlet, ha a szln tl viszed, akkor automatikusan scrollbar-ok jelennek meg, ha teljes mretet krsz be fogja tlteni az egsz terletet, ha kis mretet akkor pedig "tlcaeffektus" jn ltre. Igen, ez Win95-ben egy kicsit undort, ha Win 3.1-ed lenne, akkor az ablak ikonja jelenne ott meg, nem pedig egy ilyen nyomork nemtommi.

Menk ksztse
-=-=-=-=-=-=-=-

Az MDI Form alapjait ezzel el is sajttottad. Lesz mg egy kis extrzs, de elbb tternk a menkre, mert gy ltom azokkal mg egyltaln nem foglalkoztunk.

Nyomd meg a CTRL+M-et, vagy vlaszd ki a Windows/Menu Design menpontot. VB 5.0-tl felfel a Menu Designer (pontosabban ott gy hvjk, hogy Menu Editor) elhelyezkedse ms: vagy a CTRL+E, vagy a Tools/Menu Editor menpont kivlasztsval rheted el ugyanezt. A Caption hatrozza meg azt, hogy mit fog a felhasznl ltni, a Name pedig azt, hogy mi hogyan fogunk r hivatkozni. Az Index arra val, ha esetleg mentmbt akarsz kszteni, a Shortcut combban pedig azok a lehetsges billentyzetkombincik vannak, amelyekkel gyorsan el lehet rni majd az adott menpontot. Mint pldul a CTRL+M itt, a VB-ben. A Checked arra val, hogy "ki legyen-e piplva" a menpont (ksbb foglalkozunk vele), az Enabled az, hogy r tud-e kattintani a felhasznl, vagy "ki van szrklve", a Visible pedig az, hogy egyltaln lthat-e (szintn ksbb).

Vannak mindenfle nyilak is, meg hrom gond, ezekrl most lesz sz. Tegyk fel, hogy egy ilyen menszerkezetet akarunk ltrehozni:

Fjl
 j
 --
 Megnyits
 --
 Ments
 Ments msknt
 --
 Kilps
Szerkeszts
 Kivgs
 Msols
 Beilleszts
Keress
 j keress
 Kvetkez
Sg
 A programrl
  A program egyik rszrl
  A program msik rszrl
   A program msik rsznek A rszrl
   A program msik rsznek B rszrl 
  A program harmadik rszrl
 A tbbirl

Na, lesz itt minden :-) A "--" jelek azt jelentik, hogy egy vzszintes elvlaszt-vonal lesz majd ott. Ahol nem a sor elejn kezdtem, ott az azt jelenti, hogy az els felette lv, "kintebbi" menn/menponton bell van. Na, ezt jl megmondtam. Szval a "Fjl" menn bell lesz minden a "Szerkeszts"-ig, a "Szerkeszts"-en bell minden a "Keress"-ig, a "Keress"-en bell minden a "Sg"-ig, a "Sg"-n bell lesz egy "A programrl", amin bell "A Program egyik rszrl" s "A program msik rszrl", amin bell pedig a tbbi kett hlyesg, s gy tovbb.

Akkor kezdjnk neki. Caption-hz rd be, hogy Fjl, nvhez hogy mFajl. Nevet mindenkpp meg kell adni. Ezutn nyomd meg a Next gombot. rd be az j menpont jellemzit (caption: j, name: mUj), de mieltt a Next gombra kattintanl, nyomd meg a jobbra mutat nyilat! Egy kicsit beljebb kezdi a felsorolsban, s eltte nhny pont lesz. Ez mutatja, hogy eggyel alsbb szinten van. Ezutn megnyomhatod a Next-et, s berhatod a tbbi menpontot is. Ha elvlszt-vonalat akarsz kszteni, akkor "-" (gondolatjelet) kell megadni caption-knt, de nevet ebben az esetben is meg kell adni.

Ha elrontottad a sorrendet, akkor azt a felfele s lefele mutat nyilak segtsgvel vltoztathatod.

Ha vgeztl, vletlenl se kattints a Cancel, vagy a bezr gombra, mert akkor elveszik minden, s kezdheted ellrl! n mr prszor eljtszottam ezt, mit ne mondjak, elg idegest... Szval az OK-vel lpj ki ebbl az ablakbl.

Ha esetleg nem sikerlt, nzd meg a MENU.MAK-ot, abbl mr biztos megrted. Ott ugyanezt a szerkezetet hoztam ltre.

Programozni a menpontokat egyszeren lehet: egyszeren vlaszd ki, hogy melyik menpont kdjt akarod megrni, s mr rhatod is. Sajnos csak Click event ltezik a menpontokhoz.

Lttunk mr egyes programokban olyanokat is, hogy egyes menpontot radiobutton-knt funkcionlnak, azaz a menpontra kattintva ki lesz piplva. Ezt nagyon egyszer megcsinlni, ekkor kell ugyanis hasznlni az Index tulajdonsgot. Ksztsnk mondjuk egy "Els men" nev ment, amiben van hrom menpont, s mindegyik a "Opcio" nevet viselje. Ugyanazt a nevet csak abban az esetben engedi hasznlni, ha hasznljuk a fent emltett Index-et is: az els elem legyen 0, a msodik 1, a harmadik pedig 2. Amelyiket menpontot alapban ki akarjuk vlasztani, annl pipljuk ki a Checked tulajdonsgot! A menpontokhoz tartoz kd pedig itt van:

Sub Opcio_Click (Index As Integer)
  For X = 0 To 2
    Opcio(X).Checked = 0
  Next X                            ' Az sszes menpont pipjt eltnteti
  Opcio(Index).Checked = 1          ' Az Indexedik (amelyikre pp rkattintottunk) menpontot
				    ' kipiplja
End Sub

A Visible tulajdonsgrl mg nem beszltnk bvebben, csak megemltettem: arra j, hogy eltntessnk egy menpontot/ment. Termszetesen j valamire, nem csak dsznek raktk oda. Pop up menk ksztsekor nagyon hasznos lehet.

A pop up men az a fajta men, ami akkor szokott eljnni (elugrani), ha az egr jobb gombjt nyomod meg. Mindig ms a tartalma, attl fggen, hogy hol nyomod meg, pl. a Jegyzettmbben nekem ilyenek vannak:

Vissza
--
Kivgs
Msols
Beilleszts
Trls
--
Mindet kijelli

Az id- s energiatakarkossgot szem eltt tartva egy mr meglv mennket fogjuk felhasznlni. Mondjuk maradjunk az els pldnl, azon bell is a Fjl mennl. A Fjl men (teht az mFajl) Visible tulajdonsgt lltsd False-ra, a Form_MouseMove-hoz pedig rd be:

Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = 2 Then PopupMenu mFajl
End Sub

A Button vltoz tartalma ebben az esetben (teht a MouseMove-nl) 1, ha megnyomtuk a bal gombot, 2 ha a jobb gombot, 4 ha a kzpst, s ha esetleg tbbet akkor ezek a szmok sszeaddnak (pl. bal+jobb=1+2=3). Gondolom ez mskor is hasznos lehet, azrt rom le. A PopupMenu parancsot most ismerjk meg. Elg egyszer a hasznlata, paramterknt meg kell adni azt, hogy melyik menrl is van sz. 

MDI form extra
-=-=-=-=-=-=-=

Aranyos kis kzbekels volt ez a mens dolog, nem? 

Az MDI form-oknak is lehet menje. Ha mind a MDI form-nak, mind a leszrmazottjnak (MDIChild) van menje, akkor a leszrmazott menje fog az MDI form-on megjelenni (fellrja). Pldul ha az MDI Form-nak van egy Fjl menje, amin bell van egy Kilps menpont, az MDI Form Form1 ablaknak pedig van egy Fjl menje, aminek van egy Megnyits s Ments menpontja, s betltd a Form1-et, akkor az MDI form-on csak egy Fjl men fog maradni, Megnyits s Ments menpontokkal.  A Form1-en pedig nem ltszik semmi. Ha viszont bezrod a Form1-et, akkor ismt visszall az MDI form eredeti menszerkezete. rhet, nem? :-) Ksztsd el s megrted :-)

Ha a felhasznlnak pl. nyolc ablaka nyitva van, akkor el lehet kpzelni, hogy mekkora sszevisszasg uralkodik ott. Maga a felhasznl is rendet teremthetne ott, de sokkal knyelmesebb, ha egy menpont segtsgvel elrendezi ablakait. Mint a Win 3.1 Programkezelje: csak kivlasztottad a Lpcszetes elrendezs/Mozaik elrendezs menpontot, s az ablakok a helykre ugrottak. Ezt szerencsre elg knny megcsinlni VB-vel.

Pontosabban egyetlen utastssal, ez pedig az Arrange. Hasznlata:

MDIForm.Arrange Hogyan

A Hogyan rtke ngyfle lehet. 0 esetn kaszkd (azaz egymsra pl) elrendezs lesz, 1 esetn fggleges szimmetriatengely, 2-nl vzszintes szimmetriatengely, 3-nl pedig csak az ikonokat rendezi el (teht a kis mret ablakokat). A szimmetriatengelyt egy kicsit megmagyarzom:

         a
 *****************
 *       I       *
b*-------I-------*b
 *       I       *         
 *****************
         a 

Teht ha az ablak a fenti tglalap, akkor 1-es elrendezsmd szerint a kt "a" oldaltl egyenl tvolsgra lev pontoknl lesz a szimmetriatengely (teht a "-" jeleknl), 2-es elrendezsnl pedig a kt "b" oldaltl egyenl tvolsgra lev pontoknl (teht a "I" jeleknl). gy mr remlem teljesen vilgos. Ha nem ltod az brt, vlts t egy olyan karakterkszletre, ahol fix hosszsgak a betk (pl. Courier), vagy a szveget Jegyzettmben nyisd meg.




Ezt azt iromnyt Kvi Blint ksztette. Fellem azt csinlsz vele, amit akarsz, trhatod, de azrt emlts meg engem is, j? Frisstseket, folytatsokat mindig tallhatsz a Visual Basic znban: http://vbzona.fw.hu/